#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=2e5+5;
int n,x,A,B;
int head[N],to[N<<1],nxt[N<<1],tot;
int d[N];
inline void add(int u,int v){
	nxt[++tot]=head[u],to[tot]=v,head[u]=tot;
	d[u]++;
}
int a[N],cnt;
void wfs(int u,int las){
	a[++cnt]=u;
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i];
		if(v==las)continue;
		wfs(v,u);
	}
}
int st[20][N];
inline int qry(int l,int r){
	l=max(l,1),r=min(r,n);
	if(l>r)return 1e9;
	int s=__lg(r-l+1);
	return min(st[s][l],st[s][r-(1<<s)+1]);
}
int main(){
	freopen("nim.in","r",stdin);
	freopen("nim.out","w",stdout);
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>x>>A>>B;
	if(A<=B){
		cout<<1<<"\n";
		return 0;
	}
	int p1=0,p2=0,u,v;
	for(int i=1;i<n;i++){
		cin>>u>>v;
		add(u,v),add(v,u);
	}
	for(int i=1;i<=n;i++){
		if(d[i]==1)p1++;
		if(d[i]==2)p2++;
	}
	if(p1+p2==n&&p1==2&&d[x]==1){
		wfs(x,0);
		for(int i=1;i<=n;i++)st[0][i]=a[i];
		for(int i=1;(1<<i)<=n;i++){
			for(int j=1;j+(1<<i)-1<=n;j++){
				st[i][j]=min(st[i-1][j],st[i-1][j+(1<<(i-1))]);
			}
		}
		int ans=1e9;
		for(int x=1;x<=n;x++){
			if(A*x<=n){
				ans=min(ans,qry(A*x-2*B,A*x+x*B));
			}
			else{
				ans=min(ans,qry(A*(x-1)-2*B,A*(x-1)+(x+1)*B));
				break;
			}
		}
		cout<<ans<<"\n";
	}
	return 0;
	
}

